package com.server.store.data;

import java.util.List;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.shared.data.IData;
/**
 * DAO de gestion génériques des {@link IData}
 * @author queyroi
 *
 */
public abstract class DataManager<T extends IData> {
	/**
	 * Sauvegarde de la donnee dans le DataStore
	 * @param obj
	 */
	public void save(T obj){
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{		
			ofy.put(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			e.printStackTrace();
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}	
	}
	/**
	 * Suppression de la donnee dans le DataStore
	 * @param obj
	 */
	public void delete(T obj){
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{
			ofy.delete(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			e.printStackTrace();
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}
	}
	/**
	 * Mise à jour de la donnee dans le DataStore
	 * @param obj
	 */
	public void update(T obj){
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{		
			ofy.put(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}	
	}
	/**
	 * Récupération de la Liste des donnes disponible
	 * @return Liste des donnes disponible dans le DataStore	 
	 */
	public abstract List<T> getList();
	
}
